package com.itrencai.d4_date.arrays;

import java.util.Arrays;
import java.util.Comparator;

public class ArraysDemo2 {
    public static void main(String[] args) {
        //目标：自定义数组的排序规则，comparator比较器对象
        //1.Arrays的sort方法对于有值特性的数组是默认升序排序
        int[] ages={34,12,42,23};
        Arrays.sort(ages);
        System.out.println(Arrays.toString(ages));

        //2.需求：降序排序(自定义比较器对象，只能支持引用类型的排序)
        Integer[] ages1={34,12,42,23};
        //参数一：被排序的数组，必须引用类型的元素
        //参数二：匿名内部类对象，代表了一个比较器对象
        Arrays.sort(ages1,new Comparator<Integer>(){
            @Override
            public int compare(Integer o1, Integer o2) {
                //制定比较规则(升序)
                //如果认为左边数据大于右边数据，返回正整数
                //如果认为左边数据大小于右边数据，返回负整数
                //如果认为左边数据等于右边数据，返回0
                //return o1-o2;//默认升序
                //return -(o1-o2);//默认降序
                return o2-o1;//默认降序
            }
        });
        System.out.println(Arrays.toString(ages1));
        System.out.println("----------------------------");
        Student[] students=new Student[3];
        students[0]=new Student("吴磊",23,175.5);
        students[1]=new Student("谢鑫",18,185);
        students[2]=new Student("王亮",20,165.5);
        System.out.println(Arrays.toString(students));

        //Arrays.sort(students);//直接运行崩溃
        Arrays.sort(students, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                //自己制定规则
                //return o1.getAge()-o2.getAge();//按照年龄升序排序
                //return (int) (o2.getHeight()-o1.getHeight());//按照身高降序排序
                //比较浮点型可以这么写
                return Double.compare(o1.getHeight(),o2.getHeight());
            }
        });
        System.out.println(Arrays.toString(students));

    }
}
